<!-- 
  ****************************************************************************
  * Copyright 2020 Thomas E. Dickey                                          *
  * Copyright 2008-2015,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * @Id: curs_threads.3x,v 1.25 2020/02/02 23:34:34 tom Exp @
  * ***************************************************************************
  * ***************************************************************************
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>curs_threads 3x</TITLE>
<link rel="author" href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1 class="no-header">curs_threads 3x</H1>
<PRE>
<STRONG><A HREF="curs_threads.3x.html">curs_threads(3x)</A></STRONG>                                              <STRONG><A HREF="curs_threads.3x.html">curs_threads(3x)</A></STRONG>




</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
       <STRONG>curs_threads</STRONG> - <STRONG>curses</STRONG> thread support


</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>

       <STRONG>typedef</STRONG> <STRONG>int</STRONG> <STRONG>(*NCURSES_WINDOW_CB)(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>void</STRONG> <STRONG>*);</STRONG>
       <STRONG>typedef</STRONG> <STRONG>int</STRONG> <STRONG>(*NCURSES_SCREEN_CB)(SCREEN</STRONG> <STRONG>*,</STRONG> <STRONG>void</STRONG> <STRONG>*);</STRONG>
       <STRONG>int</STRONG> <STRONG>get_escdelay(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>set_escdelay(int</STRONG> <STRONG>size);</STRONG>
       <STRONG>int</STRONG> <STRONG>set_tabsize(int</STRONG> <STRONG>size);</STRONG>
       <STRONG>int</STRONG> <STRONG>use_screen(SCREEN</STRONG> <STRONG>*scr,</STRONG> <STRONG>NCURSES_SCREEN_CB</STRONG> <STRONG>func,</STRONG> <STRONG>void</STRONG> <STRONG>*data);</STRONG>
       <STRONG>int</STRONG> <STRONG>use_window(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>NCURSES_WINDOW_CB</STRONG> <STRONG>func,</STRONG> <STRONG>void</STRONG> <STRONG>*data);</STRONG>


</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
       This  implementation  can  be configured to provide rudimentary support
       for multi-threaded applications.  This makes a  different  set  of  li-
       braries, e.g., <EM>libncursest</EM> since the binary interfaces are different.

       Rather  than  modify  the interfaces to pass a thread specifier to each
       function, it adds a few functions which can be used in  any  configura-
       tion  which  hide  the  mutex's needed to prevent concurrent use of the
       global variables when configured for threading.

       In addition to forcing access to members of the <STRONG>WINDOW</STRONG> structure to  be
       via  functions  (see <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>), it makes functions of the common
       global variables, e.g., COLORS,  COLOR_PAIRS,  COLS,  ESCDELAY,  LINES,
       TABSIZE  curscr, newscr and ttytype.  Those variables are maintained as
       read-only values, stored in the <STRONG>SCREEN</STRONG> structure.

       Even this is not enough to make a thread-safe application using curses.
       A multi-threaded application would be expected to have threads updating
       separate windows (within the same  device),  or  updating  on  separate
       screens  (on  different  devices).  Also, a few of the global variables
       are considered writable by some applications.  The functions  described
       here address these special situations.

       The ESCDELAY and TABSIZE global variables are modified by some applica-
       tions.  To modify them in any configuration, use  the  <STRONG>set_escdelay</STRONG>  or
       <STRONG>set_tabsize</STRONG> functions.  Other global variables are not modifiable.

       The <STRONG>get_escdelay</STRONG> function returns the value for ESCDELAY.

       The  <STRONG>use_window</STRONG> and <STRONG>use_screen</STRONG> functions provide coarse granularity mu-
       texes for their respective <STRONG>WINDOW</STRONG> and <STRONG>SCREEN</STRONG> parameters, and call a us-
       er-supplied  function,  passing  it a <EM>data</EM> parameter, and returning the
       value from the user-supplied function to the application.


</PRE><H3><a name="h3-USAGE">USAGE</a></H3><PRE>
       All of the ncurses library functions assume that the locale is not  al-
       tered during operation.  In addition, they use data which is maintained
       within a hierarchy of scopes.

          <STRONG>o</STRONG>   global data, e.g., used in the low-level terminfo or termcap in-
              terfaces.

          <STRONG>o</STRONG>   terminal data, e.g., associated with a call to <EM>set</EM><STRONG>_</STRONG><EM>curterm</EM>.  The
              terminal data are initialized when screens are created.

          <STRONG>o</STRONG>   screen data, e.g., associated with a call to <EM>newterm</EM> or <EM>initscr</EM>.

          <STRONG>o</STRONG>   window data, e.g., associated with a call to <EM>newwin</EM>  or  <EM>subwin</EM>.
              Windows  are  associated with screens.  Pads are not necessarily
              associated with a particular screen.

              Most curses applications operate on one or more windows within a
              single screen.

          <STRONG>o</STRONG>   reentrant, i.e., it uses only the data passed as parameters.

       This  table lists the scope of data used for each symbol in the ncurses
       library when it is configured to support threading:

            Symbol                  Scope
            -------------------------------------------------------------
            BC                      global
            COLORS                  screen (readonly)
            COLOR_PAIR              reentrant
            COLOR_PAIRS             screen (readonly)
            COLS                    screen (readonly)
            ESCDELAY                screen (readonly, see <EM>set</EM><STRONG>_</STRONG><EM>escdelay</EM>)
            LINES                   screen (readonly)
            PAIR_NUMBER             reentrant
            PC                      global
            SP                      global
            TABSIZE                 screen (readonly)
            UP                      global
            acs_map                 screen (readonly)
            add_wch                 window (stdscr)
            add_wchnstr             window (stdscr)
            add_wchstr              window (stdscr)
            addch                   window (stdscr)
            addchnstr               window (stdscr)
            addchstr                window (stdscr)
            addnstr                 window (stdscr)
            addnwstr                window (stdscr)
            addstr                  window (stdscr)
            addwstr                 window (stdscr)
            assume_default_colors   screen
            attr_get                window (stdscr)
            attr_off                window (stdscr)
            attr_on                 window (stdscr)
            attr_set                window (stdscr)
            attroff                 window (stdscr)
            attron                  window (stdscr)
            attrset                 window (stdscr)
            baudrate                screen
            beep                    screen
            bkgd                    window (stdscr)
            bkgdset                 window (stdscr)
            bkgrnd                  window (stdscr)
            bkgrndset               window (stdscr)
            boolcodes               global (readonly)
            boolfnames              global (readonly)
            boolnames               global (readonly)
            border                  window (stdscr)
            border_set              window (stdscr)
            box                     window (stdscr)
            box_set                 window (stdscr)
            can_change_color        terminal
            cbreak                  screen
            chgat                   window (stdscr)
            clear                   window (stdscr)
            clearok                 window
            clrtobot                window (stdscr)
            clrtoeol                window (stdscr)
            color_content           screen
            color_set               window (stdscr)
            copywin                 window locks(source, target)

            cur_term                terminal
            curs_set                screen
            curscr                  screen (readonly)
            curses_version          global (readonly)
            def_prog_mode           terminal
            def_shell_mode          terminal
            define_key              screen
            del_curterm             screen
            delay_output            screen
            delch                   window (stdscr)
            deleteln                window (stdscr)
            delscreen               global locks(screenlist, screen)
            delwin                  global locks(windowlist)
            derwin                  screen
            doupdate                screen
            dupwin                  screen locks(window)
            echo                    screen
            echo_wchar              window (stdscr)
            echochar                window (stdscr)
            endwin                  screen
            erase                   window (stdscr)
            erasechar               window (stdscr)
            erasewchar              window (stdscr)
            filter                  global
            flash                   terminal
            flushinp                screen
            get_wch                 screen (input-operation)
            get_wstr                screen (input-operation)
            getattrs                window
            getbegx                 window
            getbegy                 window
            getbkgd                 window
            getbkgrnd               window
            getcchar                reentrant
            getch                   screen (input-operation)
            getcurx                 window
            getcury                 window
            getmaxx                 window
            getmaxy                 window
            getmouse                screen (input-operation)
            getn_wstr               screen (input-operation)
            getnstr                 screen (input-operation)
            getparx                 window
            getpary                 window
            getstr                  screen (input-operation)
            getwin                  screen (input-operation)
            halfdelay               screen
            has_colors              terminal
            has_ic                  terminal
            has_il                  terminal
            has_key                 screen
            hline                   window (stdscr)
            hline_set               window (stdscr)
            idcok                   window
            idlok                   window
            immedok                 window
            in_wch                  window (stdscr)
            in_wchnstr              window (stdscr)
            in_wchstr               window (stdscr)
            inch                    window (stdscr)
            inchnstr                window (stdscr)
            inchstr                 window (stdscr)
            init_color              screen
            init_pair               screen
            initscr                 global locks(screenlist)
            innstr                  window (stdscr)

            innwstr                 window (stdscr)
            ins_nwstr               window (stdscr)
            ins_wch                 window (stdscr)
            ins_wstr                window (stdscr)
            insch                   window (stdscr)
            insdelln                window (stdscr)
            insertln                window (stdscr)
            insnstr                 window (stdscr)
            insstr                  window (stdscr)
            instr                   window (stdscr)
            intrflush               terminal
            inwstr                  window (stdscr)
            is_cleared              window
            is_idcok                window
            is_idlok                window
            is_immedok              window
            is_keypad               window
            is_leaveok              window
            is_linetouched          window
            is_nodelay              window
            is_notimeout            window
            is_scrollok             window
            is_syncok               window
            is_term_resized         terminal
            is_wintouched           window
            isendwin                screen
            key_defined             screen
            key_name                global (static data)
            keybound                screen
            keyname                 global (static data)
            keyok                   screen
            keypad                  window
            killchar                terminal
            killwchar               terminal
            leaveok                 window
            longname                screen
            mcprint                 terminal
            meta                    screen
            mouse_trafo             window (stdscr)
            mouseinterval           screen
            mousemask               screen
            move                    window (stdscr)
            mvadd_wch               window (stdscr)
            mvadd_wchnstr           window (stdscr)
            mvadd_wchstr            window (stdscr)
            mvaddch                 window (stdscr)
            mvaddchnstr             window (stdscr)
            mvaddchstr              window (stdscr)
            mvaddnstr               window (stdscr)
            mvaddnwstr              window (stdscr)
            mvaddstr                window (stdscr)
            mvaddwstr               window (stdscr)
            mvchgat                 window (stdscr)
            mvcur                   screen
            mvdelch                 window (stdscr)
            mvderwin                window (stdscr)
            mvget_wch               screen (input-operation)
            mvget_wstr              screen (input-operation)
            mvgetch                 screen (input-operation)
            mvgetn_wstr             screen (input-operation)
            mvgetnstr               screen (input-operation)
            mvgetstr                screen (input-operation)
            mvhline                 window (stdscr)
            mvhline_set             window (stdscr)
            mvin_wch                window (stdscr)
            mvin_wchnstr            window (stdscr)

            mvin_wchstr             window (stdscr)
            mvinch                  window (stdscr)
            mvinchnstr              window (stdscr)
            mvinchstr               window (stdscr)
            mvinnstr                window (stdscr)
            mvinnwstr               window (stdscr)
            mvins_nwstr             window (stdscr)
            mvins_wch               window (stdscr)
            mvins_wstr              window (stdscr)
            mvinsch                 window (stdscr)
            mvinsnstr               window (stdscr)
            mvinsstr                window (stdscr)
            mvinstr                 window (stdscr)
            mvinwstr                window (stdscr)
            mvprintw                window (stdscr)
            mvscanw                 screen
            mvvline                 window (stdscr)
            mvvline_set             window (stdscr)
            mvwadd_wch              window
            mvwadd_wchnstr          window
            mvwadd_wchstr           window
            mvwaddch                window
            mvwaddchnstr            window
            mvwaddchstr             window
            mvwaddnstr              window
            mvwaddnwstr             window
            mvwaddstr               window
            mvwaddwstr              window
            mvwchgat                window
            mvwdelch                window
            mvwget_wch              screen (input-operation)
            mvwget_wstr             screen (input-operation)
            mvwgetch                screen (input-operation)
            mvwgetn_wstr            screen (input-operation)
            mvwgetnstr              screen (input-operation)
            mvwgetstr               screen (input-operation)
            mvwhline                window
            mvwhline_set            window
            mvwin                   window
            mvwin_wch               window
            mvwin_wchnstr           window
            mvwin_wchstr            window
            mvwinch                 window
            mvwinchnstr             window
            mvwinchstr              window
            mvwinnstr               window
            mvwinnwstr              window
            mvwins_nwstr            window
            mvwins_wch              window
            mvwins_wstr             window
            mvwinsch                window
            mvwinsnstr              window
            mvwinsstr               window
            mvwinstr                window
            mvwinwstr               window
            mvwprintw               window
            mvwscanw                screen
            mvwvline                window
            mvwvline_set            window
            napms                   reentrant
            newpad                  global locks(windowlist)
            newscr                  screen (readonly)
            newterm                 global locks(screenlist)
            newwin                  global locks(windowlist)
            nl                      screen
            nocbreak                screen

            nodelay                 window
            noecho                  screen
            nofilter                global
            nonl                    screen
            noqiflush               terminal
            noraw                   screen
            notimeout               window
            numcodes                global (readonly)
            numfnames               global (readonly)
            numnames                global (readonly)
            ospeed                  global
            overlay                 window locks(source, target)
            overwrite               window locks(source, target)
            pair_content            screen
            pecho_wchar             screen
            pechochar               screen
            pnoutrefresh            screen
            prefresh                screen
            printw                  window
            putp                    global
            putwin                  window
            qiflush                 terminal
            raw                     screen
            redrawwin               window
            refresh                 screen
            reset_prog_mode         screen
            reset_shell_mode        screen
            resetty                 terminal
            resize_term             screen locks(windowlist)
            resizeterm              screen
            restartterm             screen
            ripoffline              global (static data)
            savetty                 terminal
            scanw                   screen
            scr_dump                screen
            scr_init                screen
            scr_restore             screen
            scr_set                 screen
            scrl                    window (stdscr)
            scroll                  window
            scrollok                window
            set_curterm             screen
            set_escdelay            screen
            set_tabsize             screen
            set_term                global locks(screenlist, screen)
            setcchar                reentrant
            setscrreg               window (stdscr)
            setupterm               global
            slk_attr                screen
            slk_attr_off            screen
            slk_attr_on             screen
            slk_attr_set            screen
            slk_attroff             screen
            slk_attron              screen
            slk_attrset             screen
            slk_clear               screen
            slk_color               screen
            slk_init                screen
            slk_label               screen
            slk_noutrefresh         screen
            slk_refresh             screen
            slk_restore             screen
            slk_set                 screen
            slk_touch               screen
            slk_wset                screen
            standend                window

            standout                window
            start_color             screen
            stdscr                  screen (readonly)
            strcodes                global (readonly)
            strfnames               global (readonly)
            strnames                global (readonly)
            subpad                  window
            subwin                  window
            syncok                  window
            term_attrs              screen
            termattrs               screen
            termname                terminal
            tgetent                 global
            tgetflag                global
            tgetnum                 global
            tgetstr                 global
            tgoto                   global
            tigetflag               terminal
            tigetnum                terminal
            tigetstr                terminal
            timeout                 window (stdscr)
            touchline               window
            touchwin                window
            tparm                   global (static data)
            tputs                   screen
            trace                   global (static data)
            ttytype                 screen (readonly)
            typeahead               screen
            unctrl                  screen
            unget_wch               screen (input-operation)
            ungetch                 screen (input-operation)
            ungetmouse              screen (input-operation)
            untouchwin              window
            use_default_colors      screen
            use_env                 global (static data)
            use_extended_names      global (static data)
            use_legacy_coding       screen
            use_screen              global locks(screenlist, screen)
            use_window              global locks(windowlist, window)
            vid_attr                screen
            vid_puts                screen
            vidattr                 screen
            vidputs                 screen
            vline                   window (stdscr)
            vline_set               window (stdscr)
            vw_printw               window
            vw_scanw                screen
            vwprintw                window
            vwscanw                 screen
            wadd_wch                window
            wadd_wchnstr            window
            wadd_wchstr             window
            waddch                  window
            waddchnstr              window
            waddchstr               window
            waddnstr                window
            waddnwstr               window
            waddstr                 window
            waddwstr                window
            wattr_get               window
            wattr_off               window
            wattr_on                window
            wattr_set               window
            wattroff                window
            wattron                 window
            wattrset                window

            wbkgd                   window
            wbkgdset                window
            wbkgrnd                 window
            wbkgrndset              window
            wborder                 window
            wborder_set             window
            wchgat                  window
            wclear                  window
            wclrtobot               window
            wclrtoeol               window
            wcolor_set              window
            wcursyncup              screen (affects window plus parents)
            wdelch                  window
            wdeleteln               window
            wecho_wchar             window
            wechochar               window
            wenclose                window
            werase                  window
            wget_wch                screen (input-operation)
            wget_wstr               screen (input-operation)
            wgetbkgrnd              window
            wgetch                  screen (input-operation)
            wgetdelay               window
            wgetn_wstr              screen (input-operation)
            wgetnstr                screen (input-operation)
            wgetparent              window
            wgetscrreg              window
            wgetstr                 screen (input-operation)
            whline                  window
            whline_set              window
            win_wch                 window
            win_wchnstr             window
            win_wchstr              window
            winch                   window
            winchnstr               window
            winchstr                window
            winnstr                 window
            winnwstr                window
            wins_nwstr              window
            wins_wch                window
            wins_wstr               window
            winsch                  window
            winsdelln               window
            winsertln               window
            winsnstr                window
            winsstr                 window
            winstr                  window
            winwstr                 window
            wmouse_trafo            window
            wmove                   window
            wnoutrefresh            screen
            wprintw                 window
            wredrawln               window
            wrefresh                screen
            wresize                 window locks(windowlist)
            wscanw                  screen
            wscrl                   window
            wsetscrreg              window
            wstandend               window
            wstandout               window
            wsyncdown               screen (affects window plus parents)
            wsyncup                 screen (affects window plus parents)
            wtimeout                window
            wtouchln                window
            wunctrl                 global (static data)
            wvline                  window

            wvline_set              window


</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
       These functions all return <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>, except as noted.


</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
       Both a macro and a function are provided for each name.


</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
       These routines are specific to ncurses.  They  were  not  supported  on
       Version 7, BSD or System V implementations.  It is recommended that any
       code depending on ncurses extensions be conditioned using  NCURSES_VER-
       SION.


</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_opaque.3x.html">curs_opaque(3x)</A></STRONG>, <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>.



                                                              <STRONG><A HREF="curs_threads.3x.html">curs_threads(3x)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
<li><a href="#h3-USAGE">USAGE</a></li>
</ul>
</li>
<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
<li><a href="#h2-NOTES">NOTES</a></li>
<li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
</ul>
</div>
</BODY>
</HTML>
